package br.com.projeto.model.entities;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import br.com.projeto.model.entities.valueobjects.Acao;
import br.com.projeto.model.entities.valueobjects.Referencia;
import br.com.projeto.model.entities.valueobjects.Tipo;

@Entity
@Table(name = "historico")
public class Historico implements Serializable {

	private static final long serialVersionUID = -5191087558681252700L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Basic(optional = false)
	@Column(name = "id")
	private Integer id;
	
	@Basic(optional = false)
	@Column(name = "data")
	@Temporal(TemporalType.TIMESTAMP)
	private Date data;
	
	@Basic(optional = false)
	@Column(name = "tipo")
	private Tipo tipo;
	
	@Basic(optional = false)
	@Column(name = "tipo_referencia")
	private Referencia referencia;	
		
	@Basic(optional = false)
	@Column(name = "referencia")
	private Integer instancia;
	
	@Basic(optional = false)
	@Column(name = "acao")
	private Acao acao;	
		
	@JoinColumn(name = "projeto_id", referencedColumnName = "id")
	@ManyToOne(fetch = FetchType.LAZY)
	private Projeto projeto;
	@JoinColumn(name = "equipe_id", referencedColumnName = "id")
	@ManyToOne(optional = false, fetch = FetchType.LAZY)
	private Equipe equipe;

	@Transient
	private String titulo;
	@Transient
	private String url;
	@Transient
	private String autor;
	
	public Historico() {
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public Tipo getTipo() {
		return tipo;
	}

	public void setTipo(Tipo tipo) {
		this.tipo = tipo;
	}

	public Referencia getReferencia() {
		return referencia;
	}

	public void setReferencia(Referencia referencia) {
		this.referencia = referencia;
	}

	public Integer getInstancia() {
		return instancia;
	}

	public void setInstancia(Integer instancia) {
		this.instancia = instancia;
	}

	public Acao getAcao() {
		return acao;
	}

	public void setAcao(Acao acao) {
		this.acao = acao;
	}

	public Projeto getProjeto() {
		return projeto;
	}

	public void setProjeto(Projeto projeto) {
		this.projeto = projeto;
	}

	public Equipe getEquipe() {
		return equipe;
	}

	public void setEquipe(Equipe equipe) {
		this.equipe = equipe;
	}
	
	public void incluirInformacoes(String titulo, String url, String autor) {
		this.titulo = titulo;
		this.url = url;
		this.autor = autor;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public String getAutor() {
		return autor;
	}

	public void setAutor(String autor) {
		this.autor = autor;
	}
	

	
}
